testgtk/Alpha Window: fix the drawn area when we are drawing decorations
authorOwen W. Taylor <otaylor@fishsoup.net>
Tue, 20 Oct 2015 20:45:52 +0000 (16:45 -0400)
committerOwen W. Taylor <otaylor@fishsoup.net>
Thu, 22 Oct 2015 15:05:04 +0000 (11:05 -0400)
A GtkWindow's allocation includes the titlebar, borders, and shadows; we
only want to draw our custom alpha content over the child allocation of
the GtkWindow.

https://bugzilla.gnome.org/show_bug.cgi?id=756886

tests/testgtk.c

index eeb8c1794bd2f8143aba660d979862ec4f165863..fa3914db83edac0e73b864795bedbf852c89b314 100644 (file)
@@ -129,6 +129,22 @@ on_alpha_window_draw (GtkWidget *widget,
   cairo_pattern_t *pattern;
   int radius, width, height;
 
+  /* Get the child allocation to avoid painting over the borders */
+  GtkWidget *child = gtk_bin_get_child (GTK_BIN (widget));
+  GtkAllocation child_allocation;
+  int border_width = gtk_container_get_border_width (GTK_CONTAINER (child));
+
+  gtk_widget_get_allocation (child, &child_allocation);
+  child_allocation.x -= border_width;
+  child_allocation.y -= border_width;
+  child_allocation.width += 2 * border_width;
+  child_allocation.height += 2 * border_width;
+
+  cairo_translate (cr, child_allocation.x, child_allocation.y);
+
+  cairo_rectangle (cr, 0, 0, child_allocation.width, child_allocation.height);
+  cairo_clip (cr);
+
   width = gtk_widget_get_allocated_width (widget);
   height = gtk_widget_get_allocated_height (widget);
   radius = MIN (width, height) / 2;